﻿/*!
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using System;
using System.IO;

namespace Pittypat.Web
{
    /// <summary>
    /// 表示服务器成功接收到来自客户端发送的一段文件数据。
    /// </summary>
    sealed class UploadingMessage : Message
    {
        private long size;

        /// <summary>
        /// 使用接收到的数据的大小初始化 <see cref="UploadingMessage"/> 类的新实例。
        /// </summary>
        /// <param name="size">数据的字节数。</param>
        internal UploadingMessage(long size)
        {
            this.size = Math.Max(size, 0L);
        }

        /// <summary>
        /// 获取接收到的数据的长度，按字节计算。
        /// </summary>
        public long Size
        {
            get
            {
                return this.size;
            }
            internal set
            {
                this.size = value;
            }
        }

        /// <summary>
        /// 将当前对象作为 JSON 字符串写入指定的文本流。
        /// </summary>
        /// <param name="writer">目标文本流。</param>
        /// <exception cref="ArgumentNullException">writer 是 null。</exception>
        public override void Write(TextWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            writer.Write("{{\"type\":\"uploading\",\"size\":\"{0}\"}}", this.size);
        }

        /// <summary>
        /// 将当前对象转换字符串格式
        /// </summary>
        /// <returns>对象的字符串表示形式。</returns>
        public override string ToString()
        {
            return this.size.ToString();
        }
    }
}
